面向对象程序设计概述
面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、特性、代码与方法。对象则指的是类(class)的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。
摘自维基百科:面向对象程序设计
面向对象程序设计的一个核心概念是“万物皆对象”,在Java中所有的事物都被视为对象, 如Java中的字符串、日期、枚举等都是对象。
在Java中8种基本类型(primitive type)并不是对象,但是都有对应的对象类型,
byte -> Byte
short -> Short
int -> Integer
long -> Long
float -> Float
double -> Double
char -> Char
boolean -> Boolean
通过Java的拆包和封包功能,两者可以相互转换。综上,所以可以说在Java中万物皆对象。
面向对象编程的特点
- 封装(Encapsulation):封装是指将对象的状态(属性)和行为(方法)包装在一起的过程。这有助于隐藏对象的内部实现细节,只暴露必要的接口给外部访问,从而增强安全性并减少复杂性。
- 继承(Inheritance):继承是一种允许新创建的类(子类)继承现有类(父类)的属性和方法的机制。这有助于代码重用和扩展性,因为可以在不修改原有类的基础上添加新的功能。
- 多态(Polymorphism):多态是指不同类的对象可以通过相同的接口以不同的方式响应同一消息或方法调用。这使得我们可以编写更通用和灵活的代码,因为我们可以处理一般类型的对象,而不需要关心具体的类类型。
面向对象程序设计的好处
- 模块化:通过将程序分解为独立的、可重用的模块(对象),可以提高代码的可维护性和可读性。
- 易于维护:封装和继承使得代码更容易理解和维护,因为每个对象都负责自己的状态 和行为。
- 可扩展性:继承和多态允许开发者轻松地添加新功能,而不会影响现有的代码。
- 复用性:通过创建通用的类和对象,可以在多个项目中重用代码,节省开发时间和资源。
Java 中类(class)的结构
以下是一个简单的类的结构
其代码如下:
public class Rectangle {
private final int width;
private final int height;
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
public int getArea() {
return height * width;
}
public boolean isSquare() {
return height == width;
}
}
类与实例
要注意区分类(class)与实例(instance)。类是对象的抽象模板,而实例是根据这个模板创建的具体对象。具体如下
- 类(Class):类定义了一组属性和方法,它描述了一类具有相同特征和行为的对象的集合。在编程中,类是一个用户自定义的数据类型,它封装了数据和操作这些数据的方法。例如,上面我们定义的长方形(Rectangle)的类,它包含了宽、高以及获取面积的方法等。类是静态的,它不会执行任何操作,只是提供了一个创建对象的蓝图。
- 实例(Instance):当我们根据“
Rectangle
”类创建一个具体的长方形对象时,这个对象就是“Rectangle
”类的一个实例。每个实例都有自己的状态(属性值),但共享相同的行为(方法)。实例是动态的,它们可以执行类中定义的方法,并且可以拥有自己独特的属性值。
如下:
Rectangle rect1 = new Rectangle(10, 20);
Rectangle rect2 = new Rectangle(10, 10);
rect1
和 rect2
是同一个类的两个不同的实例。
再举一个简单的例子,“人”是一个类,而你、我、他则是“人”这个类的具体的实例。我们有着不同的属性,身高、体重 、外貌等,但是有相同的行为,如走、跑、跳等。